//
//  Queue.c
//  Tree
//
//  Created by Xavier on 2023/11/22.
//

#include "Queue.h"
// 初始化队列
void QueueInit(Queue* q){
    assert(q);
    q->front = q->rear = NULL;
}

// 队尾入队列

void QueuePush(Queue* q, QDataType data){
    QNode* newNode = (QNode*)malloc(sizeof(QNode));
    newNode->data = data;
    newNode->pNext = NULL;
    if (newNode == NULL) {
        printf("malloc is error!\n");
        exit(-1);
    }
    if (q->rear == NULL) {
        q->front = q->rear = newNode;
    }else {
        q->rear->pNext = newNode;
        q->rear = newNode;
    }
}

// 队头出队列
void QueuePop(Queue* q) {
    assert(q);
    q->front = q->front->pNext;
}

// 获取队列头部元素
QDataType QueueFront(Queue* q){
    return q->front->data;
}

// 获取队列队尾元素
QDataType QueueBack(Queue* q){
    return q->rear->data;
}

// 获取队列中有效元素个数
int QueueSize(Queue* q);
// 检测队列是否为空，如果为空返回非零结果，如果非空返回0
int QueueEmpty(Queue* q);
// 销毁队列
void QueueDestroy(Queue* q) {
    free(q->front);
    free(q->rear);
    free(q);
}

//打印队列
//void QueuePrint(Queue* q) {
//    QNode* cur = q->front;
//    while (cur) {
//        printf("%c ", cur->data);
//        cur = cur->pNext;
//    }
//    printf("\n");
//}

//int main(void){
//    Queue q;
//    QueueInit(&q);
//    QueuePush(&q, 'A');
//    QueuePush(&q, 'B');
//    QueuePush(&q, 'C');
//    QueuePush(&q, 'D');
//    QueuePush(&q, 'E');
//    QueuePrint(&q);
//    
//    QueuePop(&q);
//    QueuePrint(&q);
//}
